//package com.szamc.tableroundapi.service;
//
//import com.szamc.tableroundapi.model.MultiTable.GroupData;
//import com.szamc.tableroundapi.model.MultiTable.MultiTableFormatData;
//import com.szamc.tableroundapi.model.MultiTable.MultiTableOption;
//import com.szamc.tableroundapi.model.MultiTable.RowOption;
//import lombok.var;
//
//
//import java.lang.reflect.Field;
//import java.util.ArrayList;
//import java.util.Comparator;
//import java.util.List;
//import java.util.stream.Collectors;
//
//public class MultiTableRoundService<T> {
//    public List<T> GetRoundTable(List<T> tableList, MultiTableOption multiTableOptions) throws NoSuchFieldException, IllegalAccessException {
//        var rowGroups = GetRowGroups(multiTableOptions);
//        var columnGroups = GetColumnGroups(multiTableOptions,tableList);
//        var multiTableFormatDataList = GetMultiTableFormatData(tableList,multiTableOptions);
//        var groupDataList =  GetGroupDataList(multiTableFormatDataList,rowGroups,columnGroups);
//        var AttachgroupDataList = AttachGlobleAddCount(groupDataList,multiTableFormatDataList);
//        var IdList = GetAddIdList(AttachgroupDataList);
//        return GetRoundList(tableList,multiTableOptions,IdList);
//    }
//
//
//    //获取行分组
//    private ArrayList<String> GetRowGroups(MultiTableOption mutiTableOptions){
//        var rowGroups = new ArrayList<String>();
//        var rowOptions = mutiTableOptions.rowOptions;
//        for (int i = 0; i < rowOptions.size(); i++) {
//            if(!rowGroups.contains(rowOptions.get(i).getGroupFieldName())){
//                rowGroups.add(rowOptions.get(i).getGroupFieldName());
//            }
//        }
//        return rowGroups;
//
//    }
//
//    //获取列分组
//    private ArrayList<String> GetColumnGroups(MultiTableOption mutiTableOptions,List<T> tableList) throws NoSuchFieldException, IllegalAccessException {
//        var columnGroups = new ArrayList<String>();
//        String columnGroupFieldName = mutiTableOptions.getColumnGroupFieldName();
//        for(int i=0;i<tableList.size();i++){
//            var obj = tableList.get(i);
//            Field field = obj.getClass().getDeclaredField(columnGroupFieldName);
//            field.setAccessible(true);
//            if(!columnGroups.contains((String) field.get(obj))){
//                columnGroups.add((String) field.get(obj));
//            }
//
//        }
//        return columnGroups;
//    }
//
//    //按字段展开
//    public ArrayList<MultiTableFormatData> GetMultiTableFormatData(
//            List<T> tableList,
//            MultiTableOption MutiRowOptions
//            ) throws NoSuchFieldException, IllegalAccessException {
//        var forMatGroupFormatDataList = new ArrayList<MultiTableFormatData>();
//        for(int i=0;i<tableList.size();i++){
//            for (RowOption rowOption : MutiRowOptions.rowOptions) {
//                if (rowOption.getFieldType() != 0) {
//                    var obj = tableList.get(i);
//                    Field field = obj.getClass().getDeclaredField(rowOption.getFieldName());
//                    Field fieldGroup = obj.getClass().getDeclaredField(MutiRowOptions.getColumnGroupFieldName());
//                    field.setAccessible(true);
//                    var _formatData = new MultiTableFormatData(
//                            (double) field.get(obj),
//                            rowOption.getFieldName(),
//                            rowOption.getFieldType(),
//                            i,
//                            rowOption.getGroupFieldName(),
//                            (String) fieldGroup.get(obj)
//                    );
//                    forMatGroupFormatDataList.add(_formatData);
//                }
//            }
//        }
//        return forMatGroupFormatDataList;
//    }
//
//    //获取分组的数据
//    private ArrayList<GroupData>  GetGroupDataList(ArrayList<MultiTableFormatData> multiTableFormatDataList, ArrayList<String> RowGroups, ArrayList<String> ColumnGroups){
//        var groupDataList = new ArrayList<GroupData>();
//        for(int i=0;i<RowGroups.size();i++){
//            for(int j=0;j<ColumnGroups.size();j++){
//                int finalI = i;
//                int finalJ = j;
//                var groupFormatData = multiTableFormatDataList
//                        .stream()
//                        .filter(s ->
//                                s.getGroupRowName().equals(RowGroups.get(finalI))
//                                && s.getGroupColumnName().equals(ColumnGroups.get(finalJ)))
//                        .collect(Collectors.toList());
//
//                var groupData = GetGroupResult(
//                        RowGroups.get(finalI),
//                        ColumnGroups.get(finalJ),
//                        GetSumValue(groupFormatData),
//                        GetFloorSum(groupFormatData),
//                        groupFormatData);
//                 groupDataList.add(groupData);
//            }
//        }
//        return groupDataList;
//    }
//
//    private GroupData GetGroupResult (String groupName,String columnName,double sumValue,int sumFloor,List<MultiTableFormatData> tempResult){
//        return new GroupData(
//                groupName + "_" + columnName,
//                groupName,
//                columnName,
//                sumValue,
//                sumFloor,
//                (int) Math.floor(sumValue - sumFloor),//add count
//                sumValue-Math.floor(sumValue),
//                tempResult
//        );
//    }
//
//    private double GetSumValue(List<MultiTableFormatData> tempResult){
//        double sum = 0;
//        for(int i=0;i<tempResult.size();i++){
//            sum = sum +tempResult.get(i).getValue();
//        }
//        return sum;
//    }
//
//    private int GetFloorSum(List<MultiTableFormatData> tempResult){
//        int sum = 0;
//        for(int i=0;i<tempResult.size();i++){
//            sum = sum+ (int) Math.floor(tempResult.get(i).getValue());
//        }
//        return sum;
//    }
//
//    private double GetAllSumValue(ArrayList<MultiTableFormatData> tableRows){
//        double sum = 0;
//        for(int i=0;i<tableRows.size();i++){
//            sum = sum +tableRows.get(i).getValue();
//        }
//        return sum;
//    }
//
//    private int GetAllFloorSum(ArrayList<MultiTableFormatData> tableRows){
//        int sum = 0;
//        for(int i=0;i<tableRows.size();i++){
//            sum = sum+ (int) Math.floor(tableRows.get(i).getValue());
//        }
//        return sum;
//    }
//
//    private int GetGroupAllAddCount(List<GroupData> DivertTableRows){
//        int sum = 0;
//        for(int i=0;i<DivertTableRows.size();i++){
//            sum = sum + DivertTableRows.get(i).getAddCount();
//        }
//        return sum;
//    }
//
//    private ArrayList<GroupData> AttachGlobleAddCount(ArrayList<GroupData> groupDataList,ArrayList<MultiTableFormatData> multiTableFormatDataList){
//        //计算出总的还有多少指标
//        var allSumValue = GetAllSumValue(multiTableFormatDataList);
//        var allFloorSum = GetAllFloorSum(multiTableFormatDataList);
//        var remainAddCount = (int)Math.floor(allSumValue-allFloorSum-GetGroupAllAddCount(groupDataList));
//        groupDataList.sort(Comparator.comparing(GroupData::getDecimalPart).reversed());//排序
//        for(var i=0;i<remainAddCount;i++){
//            groupDataList.get(i).setAddCount(groupDataList.get(i).getAddCount()+1);
//        }
//
//        return groupDataList;
//    }
//
//    private  List<String> GetAddIdList (ArrayList<GroupData> groupDataList){
//        var ids = new ArrayList<String>();
//        for(int i=0;i<groupDataList.size();i++){
//            groupDataList.get(i).getMutiTableFormatData().sort(Comparator.comparing(MultiTableFormatData::getDecimalPart).reversed());//排序
//            for(var j=0;j<groupDataList.get(i).getAddCount();j++){
//                ids.add(groupDataList.get(i).getMutiTableFormatData().get(j).getId());
//            }
//        }
//        return ids;
//    }
//
//    private String GetTableId(int rowIndex,String fieldName){
//        return rowIndex + "_" + fieldName;
//    }
//
//    //给原来的List按条件+1
//    public List<T> GetRoundList(List<T> tableList, MultiTableOption multiTableOptions, List<String> Ids) throws NoSuchFieldException, IllegalAccessException {
//        for(int i=0;i<tableList.size();i++){
//            for ( RowOption rowOption : multiTableOptions.rowOptions) {
//                var _id = GetTableId(i,rowOption.getFieldName());
//                var obj = tableList.get(i);
//                Field field = obj.getClass().getField(rowOption.getFieldName());
//                var _oldValue = (double) field.get(obj);
//                var _newValue = (Math.floor(_oldValue));
//                field.setAccessible(true);
//                if (Ids.contains(_id)) {
//                    field.set(obj, _newValue + 1);
//                } else {
//                    field.set(obj, _newValue);
//                }
//            }
//        }
//        return tableList;
//    }
//
//
//
//}
